package main

import (
	"fmt"
	"reflect"
)
//[]T 是一个元素类型为 T 的 slice
//slice 的零值是 `nil`。
//slice切片	引用类型
func main() {
	p := [...]int{2, 3, 5, 7, 11, 13}
	fmt.Println("p ==", p)

	for i := 0; i < len(p); i++ {
		fmt.Printf("p[%d] == %d\n", i, p[i])
	}
	s1 := p[1:3]
	//s[lo:hi]
	//表示从 lo 到 hi-1 的 slice 元素
	fmt.Println("p[1:4] ==", p[1:4])

	// 省略下标代表从 0 开始
	fmt.Println("p[:3] ==", p[:3])

	// 省略上标代表到 len(s) 结束
	fmt.Println("p[4:] ==", p[4:])
	//空值
	fmt.Println("p[3:3] ==", p[3:3])
	//用反射得到变量的类型
	fmt.Println(reflect.TypeOf(p))//[6]int 数组类型
	fmt.Println(reflect.TypeOf(p[1:3]))//[]int 切片类型
	changeArrayValue(p)
	fmt.Println(p)//[2 3 5 7 11 13]
	changeSliceValue(s1)
	fmt.Println(s1)//[100 5]
	fmt.Println(p)//[2 100 5 7 11 13]切片是引用的数组p第一个和第二个元素，所以数组p的值被改变
}

func changeArrayValue(arr [6]int) {
	arr[0] = 100
}
func changeSliceValue(slice []int) {
	slice[0] = 100
}